/**
 * ━━━━━━神兽出没━━━━━━
 * 　　　┏┓　　　┏┓
 * 　　┏┛┻━━━┛┻┓
 * 　　┃　　　　　　　┃
 * 　　┃　　　━　　　┃
 * 　　┃　┳┛　┗┳　┃
 * 　　┃　　　　　　　┃
 * 　　┃　　　┻　　　┃
 * 　　┃　　　　　　　┃
 * 　　┗━┓　　　┏━┛
 * 　　　　┃　　　┃神兽保佑, 永无BUG!
 * 　　　　┃　　　┃Code is far away from bug with the animal protecting
 * 　　　　┃　　　┗━━━┓
 * 　　　　┃　　　　　　　┣┓
 * 　　　　┃　　　　　　　┏┛
 * 　　　　┗┓┓┏━┳┓┏┛
 * 　　　　　┃┫┫　┃┫┫
 * 　　　　　┗┻┛　┗┻┛
 * ━━━━━━感觉萌萌哒━━━━━━
 */
package com.zkgengkun.listener;

import com.rabbitmq.client.Channel;
import com.zkgengkun.domain.Division;
import com.zkgengkun.repository.DivisionRepository;
import com.zkgengkun.support.component.SpringContextUtil;
import com.zkgengkun.support.util.BeanUtils;
import com.zkgengkun.support.util.SerializeUtil;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.core.ChannelAwareMessageListener;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.Map;

/**
 * @author gengshikun
 * @date 2017/1/3
 */
public class AmqpListenerMap implements ChannelAwareMessageListener {

    @Override
    public void onMessage(Message message, Channel channel) throws Exception {
        channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); //确认消息成功消费
//        channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true); //ack返回false，并重新回到队列，api里面解释得很清楚
//        channel.basicReject(message.getMessageProperties().getDeliveryTag(), true); //拒绝消息
//        byte[] body = message.getBody();
//        String mapString = new String(body);
//        Map<String, Object> map = Jacksons.json().fromJsonToMap(mapString);
//        Set<String> keys = map.keySet();
//        for (String key : keys) {
//            System.out.println("key : " + key);
//            System.out.println("value : " + map.get(key));
//        }
        System.out.println(System.currentTimeMillis());
        Map map = (Map) SerializeUtil.deserialize(message.getBody());
//        System.out.println(map.get("123"));

        Division division = new Division();
        BeanUtils.transMap2Bean2(map, division);

        DivisionRepository divisionRepository = (DivisionRepository) SpringContextUtil.getBean("divisionRepository");
        divisionRepository.save(division);
    }
}
